---
title: Index Creation
---

## Creating a Sparse HNSW Index

An HNSW index can be created over any column with the `sparsevec` type. Sparse vectors with up to `1,000`
nonzero dimensions can be indexed.

```sql
CREATE INDEX ON <schema_name>.<table_name>
USING hnsw (<column_name> <distance_metric>);
```

<ParamField body="schema_name">
  The name of the schema, or namespace, of the table. If not provided, the
  search path is used as a default.
</ParamField>
<ParamField body="table_name" required>
  The name of the table being indexed.
</ParamField>
<ParamField body="column_name" required>
  The name of the column being indexed. Must be of type `sparsevec`.
</ParamField>
<ParamField body="distance_metric" required>
  The distance metric used for measuring similarity between two vectors. Use
  `sparsevec_l2_ops` for L2 distance, `sparsevec_ip_ops` for inner product, and
  `sparsevec_cosine_ops` for cosine distance.
</ParamField>

## Index Options

The following example demonstrates how to pass options when creating the HNSW index:

```sql
CREATE INDEX ON mock_items
USING hnsw (sparse_embedding sparsevec_l2_ops)
WITH (m = 16, ef_construction = 64);
```

<ParamField body="m" default={16}>
  The maximum number of connections per layer. A higher value increases recall
  but also increases index size and construction time.
</ParamField>
<ParamField body="ef_construction" default={64}>
  A higher value creates a higher quality graph, which increases recall but also
  construction time.
</ParamField>

## Deleting a Sparse HNSW Index

The following command deletes a sparse HNSW index:

```sql
DROP INDEX <index_name>;
```

<ParamField body="index_name" required>
  The name of the index you wish to delete.
</ParamField>

## Recreating a Sparse HNSW Index

A sparse HNSW index only needs to be recreated if the name of the indexed column changes.
To recreate the index, simply delete and create it using the SQL commands above.
